package com.baocai.tools.netty;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.CompositeByteBuf;
import io.netty.buffer.Unpooled;

//ByteBuf使用模式
//选择：大量IO数据读写，用“直接缓存区”； 业务消息编解码用“堆缓存区”
public class BufferTest {


    public void test() {

        //组合缓冲区
        //复合缓冲区COMPOSITE BUFFER:
        //可以创建多个不同的ByteBuf，然后放在一起，但是只是一个视图
        CompositeByteBuf compositeByteBuf = Unpooled.compositeBuffer();

        //创建一个堆缓冲区
        //堆缓存区HEAP BUFFER:
        //优点：存储在JVM的堆空间中，可以快速的分配和释放
        //缺点：每次使用前会拷贝到直接缓存区(也叫堆外内存)
        ByteBuf heapBuffer = Unpooled.buffer(16);

        //创建一个堆外缓冲区，直接内存
        //直接缓存区DIRECR BUFFER:
        //优点：存储在堆外内存上，堆外分配的直接内存，不会占用堆空间
        //缺点：内存的分配和释放，比在堆缓冲区更复杂
        ByteBuf directBuffer = Unpooled.directBuffer(16);

        compositeByteBuf.addComponents(heapBuffer, directBuffer);

    }

}
